﻿#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <string.h>


//在⼀个⻓为字符串中找到第⼀个只出现⼀次的字符, 并返回它的位置, 如果没有则返回 - 1(需要区分⼤⼩写).(从0开始计数)

//根据题意知，
//字符串只有字⺟构成，
//但是需要区分⼤⼩写，
//那么我们⾸先需要创建⼀个
//⼤⼩为128的数组，
//每个位置根据相对关系⽤来表⽰每个⼤⼩写字⺟，⽤128⼤⼩的数组是保证每个字⺟都能够完成映射，
//因为⼩写z的ascii码值最⼤也才122。
//⾸先是遍历字符串，
//统计出每个⼤⼩写字⺟出现的次数，
//然后再遍历字符串，
//找出第⼀
//个出现⼀次的字⺟。


//在⼀个⻓为字符串中找到第⼀个只出现⼀次的字符, 并返回它的位置, 如果没有则返回 - 1(需要区分⼤⼩写).(从0开始计数)
int FirstNotRepeatingChar(char* str)
{
	int arr[128] = { 0 };//将所有可能出现的字符的个数初始化为0
	int len = (int)strlen(str);//求出字符串长度,用于遍历
	for (int i = 0; i < len; i++)
	{
		arr[str[i]]++;//记录每个字母出现的次数 str[i]放到整型数组里面就是ASCII码 记录每个ASCII码出现的次数
	}
	for (int i = 0; i < len; i++)
	{
		if (arr[str[i]] == 1)//i从0到n 即str按出现的先后次数来 谁先为1谁就是
		{
			return i;
		}
	}
	return -1;//没有找到,返回-1

}

int main()
{
	char arr[100] = "heihei lipeixin";
	int pos = FirstNotRepeatingChar(arr);
	if (pos != -1)
	{
		printf("找到了,下标是%d", pos);
	}
	else
	{
		printf("没找到!");
	}
}